From a63fbe2fb406996cc52226cfbc667564fecfb00d Mon Sep 17 00:00:00 2001 From: "smh22@firebug.cl.cam.ac.uk" Date: Wed, 20 Jul 2005 19:45:05 +0000 Subject: [PATCH] Fix bug. Signed-off-by: Steven Hand --- linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c | 4 ++-- linux-2.6-xen-sparse/drivers/xen/netback/netback.c | 5 +++-- linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c | 2 +- linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c | 4 ++-- linux-2.6-xen-sparse/include/asm-xen/hypervisor.h | 8 ++++++++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c index 969ed44023..1fbead78c4 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c @@ -145,7 +145,7 @@ static void fast_flush_area(int idx, int nr_pages) __pte(0), 0); } - mcl[nr_pages-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL; + mcl[nr_pages-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL; if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) ) BUG(); #endif @@ -550,7 +550,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, blkif_request_t *req) 0, blkif->domid); #ifdef CONFIG_XEN_BLKDEV_TAP_BE if ( blkif->is_blktap ) - mcl[i].args[3] = ID_TO_DOM(req->id); + mcl[i].args[MULTI_UVMDOMID_INDEX] = ID_TO_DOM(req->id); #endif phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] = FOREIGN_FRAME(seg[i].buf >> PAGE_SHIFT); diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c index 45e542919d..4798b66920 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c +++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c @@ -271,7 +271,7 @@ static void net_rx_action(unsigned long unused) mcl->args[3] = DOMID_SELF; mcl++; - mcl[-3].args[2] = UVMF_TLB_FLUSH|UVMF_ALL; + mcl[-3].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL; if ( unlikely(HYPERVISOR_multicall(rx_mcl, mcl - rx_mcl) != 0) ) BUG(); @@ -428,7 +428,7 @@ static void net_tx_action(unsigned long unused) mcl++; } - mcl[-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL; + mcl[-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL; if ( unlikely(HYPERVISOR_multicall(tx_mcl, mcl - tx_mcl) != 0) ) BUG(); @@ -571,6 +571,7 @@ static void net_tx_action(unsigned long unused) mcl, MMAP_VADDR(pending_idx), pfn_pte_ma(txreq.addr >> PAGE_SHIFT, PAGE_KERNEL), 0, netif->domid); + mcl++; memcpy(&pending_tx_info[pending_idx].req, &txreq, sizeof(txreq)); diff --git a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c index 419a2c336b..3a1b4fefd6 100644 --- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c @@ -400,7 +400,7 @@ static void network_alloc_rx_buffers(struct net_device *dev) } /* After all PTEs have been zapped we blow away stale TLB entries. */ - rx_mcl[i-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL; + rx_mcl[i-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL; /* Give away a batch of pages. */ rx_mcl[i].op = __HYPERVISOR_dom_mem_op; diff --git a/linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c b/linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c index ad803ab3f5..6ea151281b 100644 --- a/linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c +++ b/linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c @@ -193,7 +193,7 @@ static void fast_flush_area(int idx, int nr_pages) __pte(0), 0); } - mcl[nr_pages-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL; + mcl[nr_pages-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL; if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) ) BUG(); } @@ -651,7 +651,7 @@ static void dispatch_usb_io(usbif_priv_t *up, usbif_request_t *req) { MULTI_update_va_mapping_otherdomain( mcl+i, MMAP_VADDR(pending_idx, i), - pfn_pte_ma(buffer_mach >> PAGE_SHIFT, remap_prot), + pfn_pte_ma((buffer_mach + offset) >> PAGE_SHIFT, remap_prot), 0, up->domid); phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] = diff --git a/linux-2.6-xen-sparse/include/asm-xen/hypervisor.h b/linux-2.6-xen-sparse/include/asm-xen/hypervisor.h index 1fd5aaf694..0301a3cf48 100644 --- a/linux-2.6-xen-sparse/include/asm-xen/hypervisor.h +++ b/linux-2.6-xen-sparse/include/asm-xen/hypervisor.h @@ -141,6 +141,14 @@ unsigned long allocate_empty_lowmem_region(unsigned long pages); #include +#if defined(CONFIG_X86_64) +#define MULTI_UVMFLAGS_INDEX 2 +#define MULTI_UVMDOMID_INDEX 3 +#else +#define MULTI_UVMFLAGS_INDEX 3 +#define MULTI_UVMDOMID_INDEX 4 +#endif + static inline void MULTI_update_va_mapping( multicall_entry_t *mcl, unsigned long va, -- 2.30.2